<?php

use think\Config;
use think\Cache;
use think\Request;
use Overtrue\EasySms\EasySms;

/*
 *  添加日志记录
 * 递归删除目录与文件
 * @param int $uid 操作的用户id
 * @param int $type 日志类型：1-管理员登录日志，2-管理员操作日志
 * @param string $content 日志内容
 */
function logger($type, $content)
{
    $request = Request::instance();
    $data = array(
        'type' => $type,
        'user_id' => session('admin_info.id'),
        'create_at' => time(),
        'ip' => $request->ip(),
        'content' => $content,
    );

    \think\Db::table('d_admin_log')->insert($data);

    return true;
}

/*
 *  递归删除目录与文件
 *  删除目标文件夹及其所有子目录
 *  $path 文件夹路径
 * @return 无返回。请查看目标文件或文件夹是否存在判断是否执行成功
 */
function del_files($path)
{
    if(is_dir($path))
    {
        $file_list= scandir($path);
        foreach ($file_list as $file)
        {
            if( $file!='.' && $file!='..')
            {
                recursively_careful($path.'/'.$file);
            }
        }
        @rmdir($path);
        //这种方法不用判断文件夹是否为空,
        //因为不管开始时文件夹是否为空,到达这里的时候,都是空的
    }
    else
    {
        @unlink($path);
        //这两个地方最好还是要用@屏蔽一下warning错误,看着闹心
    }
}

/**
 * @param array $data
 * @return array
 * 自动获取查询的图片,补全url
 * 一维数组
 */
function get_host_img($data=array()){
    foreach ($data as $k=>$v)
    {
        $file_txt = substr($v,-3);
      
        if ($file_txt == 'jpg'|| $file_txt == 'png' || $file_txt == 'gif')
        {
            if(!preg_match("/^http(s)?:\\/\\/.+/",$v))
            {
                $host = C('HOST_URL');
                //截取第一个‘/’后面的内容
//                $substr_data = substr($v,strpos($v,'.')+1);
                $substr_data = trim($v,'.');
                $data[$k] = $host.$substr_data;
            }else{
                $data[$k] = $v;
            }
        }
    }

    return $data;
}

/**
* 发送短信验证码
*
* @param string $template      模板id      查看sms.php 的 temple 配置
* @param string $cacheprefix   缓存前缀     查看sms.php 的 cache 配置
* @param int    $phone         手机号码
* @return string
*/
function sms($template, $phone, $cacheprefix)
{
    $easySms = new EasySms(Config::get('sms.config'));

    //生成验证码
    $code = rand(100000, 999999);

    //发送短信
    $res = $easySms->send($phone, [
        'template' => $template,
        'data' => [
            'code' => $code,
        ],
    ]);

    //设置短信缓存5分钟
    Cache::set($cacheprefix.$phone, $code, 300);

    if(!$res){
        //清除短信缓存
        Cache::rm($cacheprefix.$phone);

        //强制性返回提示，然后终止执行返回
        $res = array(
            'code' => '1',
            'message' => "验证码发送失败，请重新发送～",
            'data' => []
        );
        echo json_encode($res, JSON_UNESCAPED_UNICODE);
        exit;
    }

    return $res;
}


/**
 * 导入excel
 * @param string $file 文本域的名称
 * @return \think\response\Json
 */
function import_excel($file = 'file')
{
    //第一种方式，上传excel文件到服务器指定的目录下
    $res = request()->file($file);
    $info = $res->move(ROOT_PATH . 'public' .DS.'uploads'. DS . 'excel');
    $path=ROOT_PATH . 'public' . DS.'uploads'.DS .'excel/'.$info->getSaveName();

    vendor("PHPExcel.PHPExcel.IOFactory");
    $objPHPExcel = \PHPExcel_IOFactory::load($path);//读取上传的文件
    $arrExcel = $objPHPExcel->getSheet(0)->toArray();//获取其中的数据
    $word = $arrExcel[0];
    array_shift($arrExcel);

    //测试打印数据
    // $data = array();
    // $num = count($arrExcel) -1;
    //     foreach ($arrExcel as $key => $value) {

    //     $data[] = array(
    //         'name'=>$arrExcel[$key][0] === '小明' ? '小明是男的' : $arrExcel[$key][0],
    //         'age'=>$arrExcel[$key][1],
    //         'class'=>$arrExcel[$key][2],
    //     );
    // }

    return $arrExcel;
}


//格式化打印数据
function dd($data)
{
    dump(json_decode( json_encode( $data),true));exit;
}

/**
 * 接口返回成功
 * @param array $data
 * @param string $msg
 * @return \think\response\Json
 */
function success($data = [], $msg = '')
{
    $response = array(
        'code' => 0,
        'message' => $msg,
        'data' => $data,
    );
    return json($response, 200, ['Access-Control-Allow-Origin' => '*',
        'Access-Control-Allow-Headers' => 'x-requested-with,content-type,token',
        'Access-Control-Allow-Methods' => 'POST,GET,OPTIONS,DELETE',
        'Access-Control-Request-Method' => 'POST,GET,OPTIONS,DELETE'
    ]);
}

/**
 * 分页格式化
 * @param string $name 数据名
 * @param array|\think\Paginator $pageData
 * @return array
 */
function formatPage($name, $pageData)
{
    if (!is_array($pageData)) {
        $pageData = $pageData->toArray();
    }
    $pages = $pageData['last_page'];
    $data = $pageData['data'];
    return [$name => $data, 'pages' => $pages];
}

/**
 * 接口返回失败
 * @param string $msg
 * @param array $data
 * @return \think\response\Json
 */
function error($msg = '', $data = [])
{
    $response = array(
        'code' => 1,
        'message' => $msg,
        'data' => $data,
    );
    return json($response, 200, ['Access-Control-Allow-Origin' => '*',
        'Access-Control-Allow-Headers' => 'x-requested-with,content-type,token',
        'Access-Control-Allow-Methods' => 'POST,GET,OPTIONS,DELETE',
        'Access-Control-Request-Method' => 'POST,GET,OPTIONS,DELETE'
    ]);
}

/**
* 是否移动端访问访问
*
* @return bool
*/
function isMobile()
{
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
    return true;

    // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset ($_SERVER['HTTP_VIA']))
    {
        // 找不到为flase,否则为true
        if(stristr($_SERVER['HTTP_VIA'], "wap"))return true;
    }
    // 脑残法，判断手机发送的客户端标志,兼容性有待提高
    if (isset ($_SERVER['HTTP_USER_AGENT'])){
        $clientkeywords = array ('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT'])))return true;
         
        $pos = strpos(strtolower($_SERVER['HTTP_USER_AGENT']), "android") ||  strpos(strtolower($_SERVER['HTTP_USER_AGENT']), "mobile");
        if($pos)return true;
    }
        // 协议法，因为有可能不准确，放到最后判断
    if (isset ($_SERVER['HTTP_ACCEPT']))
    {
    // 如果只支持wml并且不支持html那一定是移动设备
    // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))))
        {
            return true;
        }
    }
            return false;
 }